1
NULL 트랩을 넘어서
AI013Lesson 2
00:00

C 스타일 매크로에서 C++의 유형 안전한 리터럴로의 전환은 언어 사용성에 근본적인 변화를 가져오며, "NULL 트랩" 제로 매크로의 모호성이 침묵하는 논리적 오류를 초래하는 상황을 해결합니다.

1. 오버로드 해석 실패

구형 표준(예: C++98)에서는 NULL 종종 0으로 정의됩니다. 오버로드된 함수에 전달될 때 컴파일러는 NULL 정수로 해석합니다. 이를 입증하는 예시는:

if (std::is_same<decltype(NULL), decltype(0)>::value)
std::cout << "NULL은 정수입니다";

2. nullptr 솔루션

C++11에서는 nullptr이라는 키워드를 도입하였으며, 이는 std::nullptr_t유형을 가집니다. 매크로와 달리, 정수형으로 암시적 변환이 불가능하며(불린 제외), 포인터 전용 오버로드가 선택되도록 보장합니다.

과거의 트랩foo(NULL)foo(int)을 호출함현대적 해결책foo(nullptr)foo(char*)을 호출함

3. 연결 및 상호운용성

현대적인 C++는 extern "C" C 코드와 연결할 때 이름 매글링을 방지하기 위해 필요합니다 (예: gcc로 컴파일된 경우). 이 경계에서 유형 안전한 포인터를 유지하는 것은 매우 중요합니다.

$$\text{std::nullptr\_t} \neq \text{int}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>